UE4文本编辑组件EditableText输入中文拼音的时候会触发OnTextChanged |
您所在的位置:网站首页 › ue4 文字 › UE4文本编辑组件EditableText输入中文拼音的时候会触发OnTextChanged |
UE4中EditableText 组件,在PC端或者IOS端等输入中文的时候,会将中文拼音也同步输入到编辑框中 组件会在每一次有输入的时候触发OnTextChanged事件 这个事件传递过来的参数是所输入的所有的字符,包括拼音。 我们监听这个函数一般有两个需求: (1)实时统计输入的字符个数 (2)检测输入的字符是否达到最大值,如果达到最大值则进行截取 这个时候,就会有一个问题,比如上面的截图,我们真实输入的字符是 “你好” 这个两个字符,但我们通过这个事件的参数获取的字符串是 "你好shi'jie" 这9个字符。这个时候字符长度统计就和我们需求的不一致了,我们希望能够将当前输入的拼音从这个字符串中去除,统计其他字符串长度。 但是去除拼音这个操作,我们不太好控制,因为有时候我们输入的最终结果就是拼音,你不能不让人家输入吧。 我们希望的时候,在我们进行字符个数统计的时候,当前不是在输入拼音状态。 所以在接收到OnTextChanged事件的时候,只要可以判断当前不是输入拼音的状态,就可以放心大胆的去统计字符个数了,如果是输入拼音状态,则我们不进行任何操作即可。 那如何判断当前是输入拼音状态呢,我们通过调试源码发现,有一个函数 GetSelectedText() ,获取当前选中的字符串这个函数,如果当前是输入状态,则只有在输入拼音的时候会返回输入拼音的最有一个字母,其他时候是个空字符串。 所以我们可以以此作为当前是否正在输入拼音的判断,即当接收到OnTextChanged事件的时候,在这个事件的回调函数中进行判断,GetSelectedText()返回是否是一个空字符串,如果是空字符串我们就进行字符个数检测,如果不是空字符串,则不进行字符个数检测。 //事件回调 this->OnTextChanged.AddDynamic(this, &UMUEditableTextBox::RawTextChangedHandler); void UMUEditableTextBox::RawTextChangedHandler(const FText& InText) { //获取选中部分,如果选中不为空,说明正在输入拼音,则不触发字数检测 FString SelectedStr = MyEditableTextBlock->GetSelectedText().ToString(); if (SelectedStr.IsEmpty()) { FString InputStr = InText.ToString(); int32 MaxCount = FCString::IsPureAnsi(*InputStr) ? MaxAnsiCount : MaxCharCount; if (MaxCount > 0 && InputStr.Len() > MaxCount) { FString Sub = InputStr.Left(MaxCount); this->SetText(FText::FromString(Sub)); return; } } } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |